Skip to content

Поиск платформы при урезанном окружении процесса - #27

Merged
Segate-ekb merged 1 commit into
oscript-library:developfrom
Segate-ekb:fix/relative-search-paths-on-stripped-env
Sep 2, 2026
Merged

Поиск платформы при урезанном окружении процесса#27
Segate-ekb merged 1 commit into
oscript-library:developfrom
Segate-ekb:fix/relative-search-paths-on-stripped-env

Conversation

@Segate-ekb

Copy link
Copy Markdown
Collaborator

Проблема

При запуске из процесса с урезанным окружением (например, дочерний процесс MCP-сервера, IDE или CI-агента) переменные ProgramW6432, ProgramFiles(x86), ALLUSERSPROFILE и ProgramData могут отсутствовать, хотя ProgramFiles и APPDATA заданы.

В этом случае СобратьСтандартныеПутиУстановки() строит относительные каталоги поиска (1Cv8, 1Cv82, 1Cv8t), а общесистемный 1CEStart.cfg ищется по относительному пути 1C\1CEStart\1CEStart.cfg. Итог: таблица установленных версий пуста, ПутьКПредприятию() возвращает "", и потребители библиотеки падают с невнятными ошибками — Cannot start process because a file name has not been provided у v8runner и «Приложение ibcmd не обнаружено!» у ibcmdrunner.

Подробный разбор с логами: vanessa-opensource/vanessa-runner#748.

Что сделано

  • Фолбэк ProgramW6432ProgramFiles при сборе стандартных путей установки (в урезанном окружении ProgramFiles обычно присутствует).
  • Пустые базовые каталоги пропускаются — относительные пути в каталоги поиска больше не попадают (обе ветки: 64- и 32-битная ОС).
  • Фолбэк ALLUSERSPROFILEProgramData при чтении 1CEStart.cfg; при пустых переменных файл не ищется по относительному пути.
  • Если после поиска не найдено ни одной версии платформы, в лог пишется предупреждение — раньше «размером 0» было видно только в полном debug-логе, и диагностика уходила не в ту сторону.

Тесты

Новый тест ТестДолжен_НайтиПлатформуВУрезанномОкружении_Windows: очищает ProgramW6432/ProgramFiles(x86)/ALLUSERSPROFILE/ProgramData, подставляет фикстуру в ProgramFiles и проверяет, что платформа находится через фолбэк. Без фикса тест красный, с фиксом — зелёный; остальные 6 тестов проходят (Windows, oscript 2.1.0).

🤖 Generated with Claude Code

При запуске из процессов с неполным окружением (например, дочерние
процессы IDE и агентов) переменные ProgramW6432, ProgramFiles(x86),
ALLUSERSPROFILE и ProgramData могут отсутствовать. Стандартные пути
установки превращались в относительные (<1Cv8>, <1Cv82>), таблица
версий оказывалась пустой, а ПутьКПредприятию() возвращал "".

- фолбэк ProgramW6432 -> ProgramFiles при сборе стандартных путей
- пустые базовые каталоги пропускаются, относительные пути в поиск
  не попадают
- фолбэк ALLUSERSPROFILE -> ProgramData для чтения 1CEStart.cfg
- предупреждение в лог, если не найдено ни одной версии платформы

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Segate-ekb

Copy link
Copy Markdown
Collaborator Author

CI: падение test (default) / ubuntu-latest не связано с изменениями — та же джоба падает на develop (HEAD 32a1565, run 25373040095) с той же причиной: BDD-шаг сравнивает вывод консоли, а в него попадает предупреждение раннера /bin/bash: warning: setlocale: LC_ALL: cannot change locale (ru_RU.UTF-8). Остальные 5 джоб зелёные, включая windows-latest, где выполняется новый юнит-тест.

@Segate-ekb
Segate-ekb merged commit b682f0f into oscript-library:develop Sep 2, 2026
5 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant